# -*- coding: utf-8 -*-
import copy
from Modele.Entite.Joueur import *
from Modele.Entite.Entite import *
from Modele.Entite.Logomates import *
from Modele.Entite.Objet import *
from Modele.Map.Map import *

import GLOB
class Modele():
	def __init__(self, controleur):
		self.controleur = controleur
		self.entites = dict() #(nomEntite:entite)
		self.actions = []
		self.listeBalles= []
		self.map = None
		
		
	def pickup(self, nomEntite, nomPickup): #nomEntite = qui a pickup (99% du temps le joueur local), nomPickup = nom du pickup
		joueur = self.entites[nomEntite]
		try:
			entiteMemoire = self.entites[nomPickup]
		except:
			print(nomPickup + " n'est pas en memoire")
			return
		objetADetruire = False
		if nomPickup.find("Soins") > -1:
			joueur.modVie(25)
			objetADetruire = True
		elif nomPickup.find("Munitions") > -1:
			joueur.arme.balles += 15
			objetADetruire = True		
		elif nomPickup.find("Teleport") > -1:
			positionString = str(entiteMemoire.positionTeleport[0]) + ";" + str(entiteMemoire.positionTeleport[1]) + ";" + str(entiteMemoire.positionTeleport[2])
			joueur.position = copy.copy(entiteMemoire.positionTeleport)
			#self.controleur.ajoutMessage("Teleport", info=str(self.controleur.nomEntite)+","+ positionString)				
		if objetADetruire:
			self.controleur.ajoutMessage("Pickup", info=nomPickup)
			#self.controleur.vue.detruireObjet(nomPickup)

	def creerEntite(self, typeObjet, position=[35,35,0], rotation=0, info=0):
		nouvelleEntite = None #creation d'un objet entite
		if typeObjet == "JoueurH":
			nouvelleEntite = JoueurHumain(self)
		elif typeObjet == "LogomateGentil":
			nouvelleEntite = LogomateGentil(self)
			position = [45,35,0]
			position[2] = 2
		elif typeObjet == "LogomateGardien":
			nouvelleEntite = LogomateGardien(self)
			position = [20,35,0]
			position[2] = 1
		elif typeObjet == "Balle":
			nouvelleEntite = Balle(self,info)
		elif typeObjet == "Soins":
			nouvelleEntite = Soins(self)
		elif typeObjet == "Munitions":
			nouvelleEntite = Munitions(self)
		elif typeObjet == "Teleport":
			nouvelleEntite = Teleport(self, info)
		else:
			pass
		nouvelleEntite.position = position #set la position de la nouvelle entite
		nouvelleEntite.rotation = rotation
		self.entites.update({nouvelleEntite.nom:nouvelleEntite}) #creer l'objet en memoire
		return nouvelleEntite
	def detruireEntite(self, nomEntite):
		for entite in self.entites:
			if str(entite) == str(nomEntite): #chercher l'entite qu'on desire trouver
				self.entites.pop(entite) #destruction de l'objet memoire
				break 

	def trouverEntite(self, nomEntite):#Trouve l'entite et la renvoie
		if(nomEntite in self.entites.keys()):
			return self.entites.get(nomEntite) #retourne l'entite 

	def trouverEntitePos(self, nomEntite):#Trouve l'entite et renvoi la position de celle-ci	
		if(nomEntite in self.entites.keys()): # il faut que l'entite en question fasse partie des clés de la liste 
			obj =  self.entites.get(nomEntite)
			return obj.position

	def printDictEntites(self): # sert juste a faire des tests, utile quand on a besoin de voir la liste de nos objets
		for nomEntite in self.entites.keys():
			print(self.entites[nomEntite])